﻿package com.eitb.programas.diputacion{
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.utils.*;
	
	import com.eitb.cargadores.*;
	import com.eitb.literales.*;
	import com.eitb.programas.diputacion.entidades.*;
	import com.eitb.programas.diputacion.rutas.*;
	import com.eitb.programas.diputacion.literales.*;
	
	import com.eitb.util.logging.*;

	public class Main extends Sprite {
		
		private const XML_DIPUTACION_ID:String="diputacion";
		private const XML_CATEGORIAS_ID:String="categorias";
		private const XML_PORTADA_ID:String="portada";

		private static var vPortada:DisplayObject;
		private static var vIntermedia:DisplayObject;
		private static var vDiputacion:DisplayObject;
		private static var vPresentacion:DisplayObject;

		private var xmlPortada:XML;
		private var xmlCategorias:XML;
		private var xmlDiputacion:XML;

		private var idiomaRetrived:String="eu";
		private var idioma:int;


		public function Main():void {
			// transforma el idioma recibido al codigo correcto de idioma en flash
			this.idioma = Literales.getIdiomaId(this.idiomaRetrived);
			Logger.log.info("En Portada con idioma: " + this.idioma);
			// comienza la carga de los datos del XML
			this.loadXmlPortada();
		}
		
		
		public function startIntermedia():void {
			this.initIntermedia(this.xmlCategorias.diputacion);
			if(Main.vDiputacion != null) {
				Main.vDiputacion.visible = false;
				this.removeChild(Main.vDiputacion);
			} else if(Main.vPresentacion != null) {
				Main.vPresentacion.visible = false;
				this.removeChild(Main.vPresentacion);
			}
		}
		
		public function startPortada(text:String):void {
			this.initPortada(this.xmlPortada.portada, text);
			Main.vIntermedia.visible = false;
			this.removeChild(Main.vIntermedia);
		}
		
		public function startDiputacion(text:String):void {
			this.initDiputacion(this.xmlDiputacion.diputacion,text);
			// oculta la pantalla intermedia
			if(Main.vPortada != null) {
				Main.vPortada.visible = false;
				this.removeChild(Main.vPortada);
			} else if(Main.vPresentacion != null) {
				Main.vPresentacion.visible = false;
				this.removeChild(Main.vPresentacion);
			}
			
		}
		
		public function startPresentacion(categoria:Categoria):void {
			this.initPresentacion(categoria);
			Main.vIntermedia.visible = false;
			this.removeChild(Main.vIntermedia);
		}
		
		//PANTALLA INTERMEDIA
		private function initPresentacion(categoria:Categoria):void {
			Logger.log.info("En Presentacion");
			var dialogo:DialogoPresentacion = new DialogoPresentacion();
			var modelo:ModeloPresentacion = new ModeloPresentacion(categoria);
			// almacena las vistas para trabajar con ellas si es necesario
			Main.vPresentacion = dialogo;
			// pone en pantalla el programa
			this.addChild(dialogo);
			dialogo.initControlador(modelo);
			modelo.initVista(dialogo);
			modelo.initMain(this);
			dialogo.initControladorCargador(modelo);
			modelo.initVistaCargador(dialogo.cargador);
			modelo.initVistaVideo(dialogo.video);
			
			// enlaza el sistema de imagenes
			dialogo.imagenes.initControlador(modelo);
			modelo.initVistaGallery(dialogo.imagenes);
			dialogo.imagenes.init();
			
			// inicializa las variables 
			dialogo.initEvents();
			
			modelo.initIdioma(this.idioma);
			modelo.initLiterales(new DiputacionLiterales(this.idioma));
			modelo.initLiteralesCargador(new CargadorLiterales(this.idioma));
			
			modelo.start();
		}

		// CARGA XML para la portada
		private function loadXmlPortada():void {
			var loader:URLLoader;
			loader = new URLLoader();
			loader.addEventListener(Event.COMPLETE, completePortadaHandler);
			try {
				loader.load(new Rutas().getXml(XML_PORTADA_ID, this.idiomaRetrived));
			} catch (error:Error) {
				trace("Error al cargar");
			}
		}
		private function completePortadaHandler(event:Event):void {
			// guarda los datos del xml
			this.xmlPortada=new XML(URLLoader(event.target).data);
			this.loadXmlCategorias();
		}
		
		// CARGA XML de categorias
		private function loadXmlCategorias():void {
			var loader:URLLoader;
			loader = new URLLoader();
			loader.addEventListener(Event.COMPLETE, completeCategoriasHandler);
			try {
				loader.load(new Rutas().getXml(XML_CATEGORIAS_ID, this.idiomaRetrived));
			} catch (error:Error) {
				trace("Error al cargar");
			}
		}
		
		private function completeCategoriasHandler(event:Event):void {
			this.xmlCategorias=new XML(URLLoader(event.target).data);
			this.loadXmlProyectos();
		}
		
		
		
		private function loadXmlProyectos():void {
			var loader:URLLoader;
			loader = new URLLoader();
			loader.addEventListener(Event.COMPLETE, completeProyectosHandler);
			try {
				loader.load(new Rutas().getXml(XML_DIPUTACION_ID, this.idiomaRetrived));
			} catch (error:Error) {
			}
		}
		private function completeProyectosHandler(event:Event):void {
			// guarda los datos del xml
			this.xmlDiputacion=new XML(URLLoader(event.target).data);
			// inicia la carga de la portada y con esto comienza el programa
			this.initIntermedia(this.xmlCategorias.diputacion);
		}
		// CARGA XML

		// PORTADA
		private function initPortada(xml:XMLList, text:String):void {
			Logger.log.info("En Portada");			
			var dialogo:Portada = new Portada();
			var modelo:ModeloPortada = new ModeloPortada();
			// almacena las vistas para trabajar con ellas si es necesario
			Main.vPortada=dialogo;
			// pone en pantalla la portada
			this.addChild(dialogo);
			// enlaza la aplicacion de portada
			dialogo.initControlador(modelo);
			modelo.initMain(this);
			modelo.initVista(dialogo);
			// enlaza los comportamientos de textos e imagenes automaticos
			modelo.initVistaTextosAutomaticos(dialogo);
			modelo.initVistaImagenesAutomaticas(dialogo);
			// enlaza el comportamiento de cargador con el diseño del cargador correcto
			dialogo.initControladorCargador(modelo);
			modelo.initVistaCargador(dialogo.cargador);
			// inicializa las variables 
			modelo.initIdioma(this.idioma);
			modelo.initLiteralesCargador(new CargadorLiterales(this.idioma));
			modelo.initXmlTextos(xml.textos);
			modelo.initXmlImagenes(xml.imagenes);
			// comienza el proceso de carga de las imagenes en el xml
			modelo.loadImagenes();			
			modelo.setCategorySelected(text);
			// inicializa los eventos de la portada
			dialogo.addEventListener(MouseEvent.CLICK, modelo.onContinueBtnClick);
		}
		
		//PANTALLA INTERMEDIA
		private function initIntermedia(xml:XMLList):void {
			Logger.log.info("En Diputacion");
			var dialogo:DialogoIntermedio = new DialogoIntermedio();
			var modelo:ModeloIntermedio = new ModeloIntermedio();
			// almacena las vistas para trabajar con ellas si es necesario
			Main.vIntermedia = dialogo;
			// pone en pantalla el programa
			this.addChild(dialogo);
			dialogo.initControlador(modelo);
			modelo.initVista(dialogo);
			modelo.initMain(this);
			modelo.initLiterales(new DiputacionLiterales(this.idioma));
			dialogo.initControladorCargador(modelo);
			// inicializa las variables 
			dialogo.initEvents();
			modelo.initXmlData(xml);
			modelo.start();
		}
		
		
		
		// DIPUTACION
		private function initDiputacion(xml:XMLList, text:String):void {
			Logger.log.info("En Diputacion");
			var dialogo:DialogoDiputacion = new DialogoDiputacion();
			var modelo:ModeloDiputacion = new ModeloDiputacion(text);
			// almacena las vistas para trabajar con ellas si es necesario
			Main.vDiputacion=dialogo;
			// pone en pantalla el programa
			this.addChild(dialogo); 
			// enlaza la aplicacion de diputacion
			dialogo.initControlador(modelo);
			modelo.initVista(dialogo);
			modelo.initMain(this);
			// enlaza el comportamiento de cargador con el diseño del cargador correcto
			dialogo.initControladorCargador(modelo);
			modelo.initVistaCargador(dialogo.cargador);

			
			// enlaza el sistema de video
			///dialogo.video.initControlador(modelo);
			modelo.initVistaVideo(dialogo.video);
			
			// enlaza el sistema de pestaña
			dialogo.pestana.initControlador(modelo);
			modelo.initVistaPestana(dialogo.pestana);
			

			// enlaza el sistema de imagenes
			dialogo.imagenes.initControlador(modelo);
			modelo.initVistaGallery(dialogo.imagenes);
			dialogo.imagenes.init();

			// inicializa las variables 
			dialogo.initEvents();
			modelo.initIdioma(this.idioma);
			modelo.initLiterales(new DiputacionLiterales(this.idioma));
			modelo.initLiteralesCargador(new CargadorLiterales(this.idioma));
			dialogo.pestana.init();
			modelo.initXmlData(xml);
			// abre la pesataña pero no deja que se recoja salvo que haya una selección
			// posteriormete se abre o cierra si el ratón esta sobre ella o no
			modelo.start();
			// comienza el proceso de carga de las imagenes en el xml
		}
		// DIPUTACION
	}
}